"""
283. 移动零
给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作，不能拷贝额外的数组。
尽量减少操作次数。
"""
from typing import List


class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        zero_point, non_zero_point = 0, 0

        while zero_point <= len(nums) - 1 and non_zero_point <= len(nums) - 1:
            while zero_point < len(nums) - 1 and nums[zero_point] != 0:
                zero_point += 1
            while non_zero_point < len(nums) - 1 and (
                nums[non_zero_point] == 0 or non_zero_point < zero_point
            ):
                non_zero_point += 1

            print(nums, zero_point, non_zero_point)
            nums[non_zero_point], nums[zero_point] = (
                nums[zero_point],
                nums[non_zero_point],
            )
            if non_zero_point == len(nums) - 1 or zero_point == len(nums) - 1:
                return


if __name__ == "__main__":
    a = Solution()
    nums = [0, 1, 0, 3, 12]
    a.moveZeroes(nums)
    print(nums)
